// 例10.4 从键盘输入10个学生的有关数据，然后把它们转存到磁盘文件上去。 
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10

struct Student_type
{ char name[10];
   int num;
   int age;
   char addr[15];
};

struct Student_type stud[SIZE];

void save()
{
    FILE *fp;
    // 编程要点1：使用二进制模式打开文件
    fp = fopen("stu.dat", "wb");
    if (fp == NULL)
    {
        printf("cannot open file\n");
        // 编程要点2：使用exit函数退出整个程序
        exit(1);
    }
    // 方式1：使用循环写入文件
    /*
    int i;
    for(i = 0; i < SIZE; i++)
    {
        if (fwrite(&stud[i], sizeof(stud[i]), 1, fp) != 1)
        {
            printf("file write error\n");
            exit(2);
        }
    }
    */
    
    // 方式2：直接使用fwrite直接写入整个数组
    int ret = fwrite(stud, sizeof(struct Student_type), SIZE, fp);
    if (ret != SIZE)
    {
        printf("file write error\n");
        exit(2);
    }
    // 编程要点3：记得及时关闭文件
    fclose(fp);
}

int main(int argc, char *argv[])
{
    int i;
    printf("enter data of students:\n");
    for(i = 0; i < SIZE; i++)
    {
        scanf("%s%d%d%s", stud[i].name, &stud[i].num, &stud[i].age, stud[i].addr);
    }
    // 调用save写入文件
    save();
    return 0;
}
/*
测试数据：
s1 12341 31 addr1
s2 12342 32 addr2
s3 12343 33 addr3
s4 12344 34 addr4
s5 12345 35 addr5
s6 12346 36 addr6
s7 12347 37 addr7
s8 12348 38 addr8
s9 12349 39 addr9
s10 12350 40 addr10
*/